package com.cf.web.util;

import java.lang.reflect.Field;
import java.util.List;

public class JsonUtil {

    // 将对象转换为 JSON 字符串
    public static String toJson(Object object) {
        if (object == null) {
            return "null";
        }
        StringBuilder jsonBuilder = new StringBuilder("{");

        // 获取对象的所有字段
        Field[] fields = object.getClass().getDeclaredFields(); // 显式声明类型
        for (int i = 0; i < fields.length; i++) {
            Field field = fields[i]; // 获取字段
            field.setAccessible(true); // 设置字段可访问
            try {
                Object value = field.get(object); // 获取字段的值
                // 拼接字段名和字段值，使用双引号包裹
                jsonBuilder.append("\"").append(field.getName()).append("\":")
                        .append(escapeJson(value == null ? "" : value.toString()));
                if (i < fields.length - 1) {
                    jsonBuilder.append(",");
                }
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
        jsonBuilder.append("}");
        return jsonBuilder.toString();
    }

    // 将 List 转换为 JSON 字符串
    public static String toJson(List<?> list) {
        StringBuilder jsonBuilder = new StringBuilder("[");
        for (int i = 0; i < list.size(); i++) {
            Object object = list.get(i);
            jsonBuilder.append(toJson(object)); // 递归调用 toJson(Object) 方法
            if (i < list.size() - 1) {
                jsonBuilder.append(",");
            }
        }
        jsonBuilder.append("]");
        return jsonBuilder.toString();
    }

    // 处理 JSON 特殊字符的转义
    private static String escapeJson(String value) {
        if (value == null) {
            return "";
        }
        return value.replace("\"", "\\\"") // 转义双引号
                .replace("\\", "\\\\") // 转义反斜杠
                .replace("\n", "\\n") // 转义换行符
                .replace("\r", "\\r") // 转义回车符
                .replace("\t", "\\t"); // 转义制表符
    }
}
